# 导入Django框架中的models模块，用于定义数据库模型
from django.db import models


class SysUser(models.Model):
    """
    系统用户模型类，用于管理用户信息。

    属性:
    - id: 自动增长的主键。
    - username: 用户名，最大长度为100，唯一标识用户。
    - password: 密码，最大长度为100。
    - avatar: 用户头像的URL或路径，最大长度为255，可以为空。
    - email: 用户邮箱，最大长度为100，可以为空。
    - phonenumber: 手机号码，最大长度为11，可以为空。
    - login_date: 最后登录时间，可以为空。
    - status: 帐号状态，整数类型，0代表正常，1代表停用。
    - create_time: 创建时间。
    - update_time: 更新时间。
    - remark: 备注，最大长度为500，可以为空。

    Meta:
    - db_table: 数据库表名为sys_user。
    - verbose_name: 模型的显示名称为用户管理。
    - ordering: 按照id字段进行排序。
    """
    id = models.AutoField(primary_key=True)
    username = models.CharField(max_length=100, unique=True, verbose_name="用户名",db_comment="用户名")
    password = models.CharField(max_length=100, verbose_name="密码",db_comment="密码")
    avatar = models.CharField(max_length=255, null=True, blank=True, verbose_name="用户头像",db_comment="用户头像")
    email = models.CharField(max_length=100, null=True, blank=True, verbose_name="用户邮箱",db_comment="用户邮箱")
    phonenumber = models.CharField(max_length=11, null=True, blank=True, verbose_name="手机号码",db_comment="手机号码")
    nickname = models.CharField(max_length=50, null=True, blank=True, verbose_name="用户昵称",db_comment="用户昵称")
    gender = models.CharField( max_length=10, null=True, blank=True, choices=[('male', '男'), ('female', '女'), ('other', '其他')], verbose_name="性别",db_comment="性别")
    birthday = models.DateField(null=True, blank=True, verbose_name="生日",db_comment="生日")
    bio = models.TextField(max_length=200, null=True, blank=True, verbose_name="个人简介",db_comment="个人简介")
    login_date = models.DateField(null=True, verbose_name="最后登录时间",db_comment="最后登录时间")
    status = models.IntegerField(default=0, verbose_name="帐号状态（0正常 1停用）",db_comment="帐号状态（0正常 1停用）")
    create_time = models.DateField(auto_now_add=True, verbose_name="创建时间",db_comment="创建时间")
    update_time = models.DateField(auto_now=True, verbose_name="更新时间",db_comment="更新时间")
    remark = models.CharField(max_length=500, null=True, verbose_name="备注",db_comment="备注")

    # 为JWT认证添加必要的方法和属性
    @property
    def is_anonymous(self):
        return False

    @property
    def is_authenticated(self):
        return True

    @property
    def is_active(self):
        return self.status == 0  # 0表示正常，1表示停用

    class Meta:
        db_table = "sys_user"
        verbose_name = "用户管理"
        ordering = ['id']
